Embedded systems are special-purpose computer systems designed to perform one or more dedicated functions. Some types of embedded system include cell phones, calculators, GPS (global positioning system) receivers, printers, network devices, digital cameras, traffic light controllers, etc. Embedded systems have one or more processors for controlling system operation. The embedded processor typically has one or more levels of cache for locally storing data and instructions. Locally caching data and instructions enables the embedded processor to quickly access information, thus avoiding the delay associated with reading the data and instructions from main memory external to the embedded system. However, data and instructions needed by an embedded processor are not always stored in a local cache due to their limited capacity. Also, there may be no cache coherency between peripherals and the processor in some systems, so the processor must invalidate the cache before processing newly received data. In either case, the processor must wait until the desired information is loaded from external system memory to the high speed cache. Many processor cycles are consumed while the desired information is read from the external main memory and stored in a high-speed local cache, reducing processor performance.
Embedded systems also typically include one or more peripheral devices such as Input/Output (I/O) devices like Ethernet controllers, USB controllers, UART (universal asynchronous receiver/transmitter) controllers, etc. An embedded peripheral device collects data from its I/O interface and passes the data to a DMA (direct memory access) controller. The DMA controller typically writes the data to the main memory located outside the embedded system and notifies the processor of the new data, e.g., via an interrupt signal. The embedded processor in turn reads the new data and processes it. However, the processor must wait several cycles while the data is read from the external memory over a slow memory interface. The data is eventually stored in a fast local cache accessible to the embedded processor, but the processor must wait for the data to be read from the external memory before processing the data.